# coding: utf-8

'''\
Pyshoper.
Корневой модуль.
Скопировать в эту docstring длинное описание проекта.
'''
import os
import logging
import pyshoper.modules
from pyshoper.dbaccess import RedisAccess
from pyshoper.datadefs import Tree
from time import strftime # as _strftime
from jinja2 import\
    (Environment, PackageLoader, Template) # jinja2

jinja2_environment = None

# Нужен нормальный вариант этой функции.
def get_dir(modulename):
    selected_path = os.path.join(os.path.abspath('.'), modulename)
    if not os.path.exists(selected_path):
        os.mkdir(selected_path)
    return selected_path

def initialize():
    '''
    Инициализация среды jinja2, модулей и системы логирования.'''
    #global jinja2_environment
    #jinja2_environment =\
    #    Environment(loader=PackageLoader('pyshoper', 'templates'),
    #                extensions=['jinja2.ext.autoescape'])
    logging.basicConfig(filename='pyshoper.log', level=logging.DEBUG) # DEBUG
    pyshoper.modules.initialize()
    
def iteratemain():
    '''
    Рабочий цикл приложения:
    Поочередный запуск модулей и дамп собранных данных в xml.'''
    # Временная вставка:
    for name in pyshoper.modules.ext_classes:
        logging.debug('Awaking module {0}.'.format(name))
        pyshoper.modules.wake_only(name)
        pyshoper.modules.wait_all()
        harvested = pyshoper.modules.return_completed()
        #logging.debug('Generating template and dumping data.')
        # Экспорт дерева категорий и элементов в xml со всеми характеристиками.
        #filename = strftime('{0}[%d-%m-%y].xml'.format(name))
        #with open(os.path.join(get_dir(name), filename), 'w') as dump:
        #    dump.write(jinja2_environment
        #            .get_template('global.xml.tpl')
        #            .render(tree=harvested)
        #            .encode('utf8'))
        db = RedisAccess('localhost')
        db.set_working_revision('today')
        db.perform_tree(harvested)
        return harvested
